#include "MySQLConnection.h"

using std::cout;
using std::endl;

MySQLConnection::MySQLConnection(const string &ip, const string &user, const string &password, const string &database)
{
    _driver = sql::mysql::get_mysql_driver_instance();// 获取数据库驱动
    _conn.reset(_driver->connect(ip, user, password)); // 连接数据库
    _conn->setSchema(database); // 设置数据库
    cout << "MySQLConnection::MySQLConnection() 连接数据库成功" << endl;
}

MySQLConnection::~MySQLConnection()
{
    _conn.reset(); // 释放数据库连接
    _driver = nullptr; // 释放数据库驱动
    cout << "MySQLConnection::~MySQLConnection() 释放数据库连接成功" << endl;
}

void MySQLConnection::query(const std::string &query)
{
    _stmt.reset(_conn->createStatement()); // 创建语句
    _res.reset(_stmt->executeQuery(query)); // 执行查询
    while(_res->next())
    {
        cout << "RESULT: " << _res->getString("name") << " " << _res->getString("email") << endl; // 打印查询结果
    }
}

void MySQLConnection::update(const std::string &query)
{
    _stmt.reset(_conn->createStatement()); // 创建语句
    _stmt->execute(query); // 执行更新
    cout << "UPDATE: " << _stmt->getUpdateCount() << endl; // 打印更新结果
}

void MySQLConnection::transaction(const std::string &query)
{
    _stmt.reset(_conn->createStatement()); // 创建语句
    _stmt->execute(query); // 执行事务
    cout << "TRANSACTION: " << _stmt->getUpdateCount() << endl; // 打印事务结果
}
